package afteradvice;

import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.ThrowsAdvice;

import java.lang.reflect.Method;

//通知类  后置通知类
public class MyAfterAdvice implements AfterReturningAdvice,ThrowsAdvice{


    /**
    * 后置通知类中执行额外功能的方法   程序正常执行不抛出异常时执行的额外功能
     * 参数：
    *   returnValue(Object):切入方法的返回值
     *  method(Method): 方法对象
     *  args(Object[]): 方法的参数
     *  object(Object): 目标类对象
    * */
    @Override
    public void afterReturning(Object returnValue, Method method, Object[] args, Object object)
            throws Throwable {
        System.out.println("关闭事务");

        System.out.println("方法的返回值: "+returnValue);
        System.out.println("方法对象: "+method.getName());

        for (int i = 0; i < args.length; i++) {
            Object arg = args[i];
            System.out.println("方法的参数: "+arg);
        }

        System.out.println("目标类对象: "+object.getClass().getName());
    }

    /**
     * 异常通知 当方法跑出异常之后才执行的方法
     * 参数：
     *  method(Method): 方法对象
     *  args(Object[]): 方法的参数
     *  object(Object): 目标类对象
     *  object(Object): 目标类对象
     *  exception：出现异常的异常对象
     * */
    public void afterThrowing(Method method, Object[] args, Object object, RuntimeException exception) {

        System.out.println("===进入异常通知===");
        System.out.println("exception："+exception.getMessage());
    }


}
